// 测试卡片生成器功能
const CardGenerator = require('./src/services/cardGenerator');
const AiModelService = require('./src/services/aiModelService');
const mongoose = require('mongoose');
const fs = require('fs');
const path = require('path');
require('dotenv').config();

// 测试数据
const testChapter = {
  title: "Node.js基础",
  content: `
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。
Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。
Node.js的包管理器npm，是全球最大的开源库生态系统。

主要特点：
1. 非阻塞I/O
2. 事件驱动
3. 轻量高效
4. 单线程
5. 跨平台

Node.js适合开发需要处理大量并发连接但计算强度不高的应用，如聊天服务器、API服务等。

Node.js模块系统：
- 核心模块：Node.js自带的模块，如fs、http、path等
- 文件模块：开发者编写的模块
- 第三方模块：通过npm安装的模块

Node.js事件循环：
1. 定时器阶段：执行setTimeout()和setInterval()的回调
2. I/O回调阶段：执行除了close事件、定时器和setImmediate()的回调
3. 闲置阶段：仅系统内部使用
4. 轮询阶段：检索新的I/O事件，执行与I/O相关的回调
5. 检查阶段：执行setImmediate()的回调
6. 关闭事件回调阶段：执行socket.on('close', ...)等回调
  `
};

// 模拟不同类型的AI响应
const mockResponses = {
  // 正常JSON响应
  normalJson: {
    success: true,
    result: `[
      {
        "title": "Node.js简介",
        "content": "Node.js是一个基于Chrome V8引擎的JavaScript运行环境。",
        "tags": ["Node.js", "V8引擎", "JavaScript"]
      },
      {
        "title": "Node.js特点",
        "content": "Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。",
        "tags": ["事件驱动", "非阻塞I/O", "高效"]
      }
    ]`
  },
  
  // 代码块格式响应
  codeBlockJson: {
    success: true,
    result: "```json\n[\n  {\n    \"title\": \"Node.js简介\",\n    \"content\": \"Node.js是一个基于Chrome V8引擎的JavaScript运行环境。\",\n    \"tags\": [\"Node.js\", \"V8引擎\", \"JavaScript\"]\n  },\n  {\n    \"title\": \"Node.js特点\",\n    \"content\": \"Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。\",\n    \"tags\": [\"事件驱动\", \"非阻塞I/O\", \"高效\"]\n  }\n]\n```"
  },
  
  // HTML格式响应
  htmlResponse: {
    success: true,
    result: "<html><body><pre>[\n  {\n    \"title\": \"Node.js简介\",\n    \"content\": \"Node.js是一个基于Chrome V8引擎的JavaScript运行环境。\",\n    \"tags\": [\"Node.js\", \"V8引擎\", \"JavaScript\"]\n  },\n  {\n    \"title\": \"Node.js特点\",\n    \"content\": \"Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。\",\n    \"tags\": [\"事件驱动\", \"非阻塞I/O\", \"高效\"]\n  }\n]</pre></body></html>"
  },
  
  // 错误格式JSON响应（有多余的逗号）
  invalidJson: {
    success: true,
    result: `[
      {
        "title": "Node.js简介",
        "content": "Node.js是一个基于Chrome V8引擎的JavaScript运行环境。",
        "tags": ["Node.js", "V8引擎", "JavaScript"],
      },
      {
        "title": "Node.js特点",
        "content": "Node.js使用了一个事件驱动、非阻塞式I/O的模型，使其轻量又高效。",
        "tags": ["事件驱动", "非阻塞I/O", "高效"],
      }
    ]`
  },
  
  // 空响应
  emptyResponse: {
    success: true,
    result: ""
  },
  
  // 错误响应
  errorResponse: {
    success: false,
    error: "API调用失败"
  }
};

// 测试卡片生成器对不同响应类型的处理能力
async function testCardGenerator() {
  console.log('='.repeat(80));
  console.log('测试卡片生成器对不同响应类型的处理能力');
  console.log('='.repeat(80));
  
  // 保存原始方法
  const originalParseWithQwenLong = AiModelService.parseWithQwenLong;
  
  // 连接到测试数据库
  try {
    await mongoose.connect(process.env.MONGODB_URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });
    console.log('已连接到MongoDB');
    
    // 测试正常JSON响应
    console.log('\n测试场景1: 正常JSON响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.normalJson;
    let cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    // 测试代码块格式响应
    console.log('\n测试场景2: 代码块格式响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.codeBlockJson;
    cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    // 测试HTML格式响应
    console.log('\n测试场景3: HTML格式响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.htmlResponse;
    cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    // 测试错误格式JSON响应
    console.log('\n测试场景4: 错误格式JSON响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.invalidJson;
    cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    // 测试空响应
    console.log('\n测试场景5: 空响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.emptyResponse;
    cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    // 测试错误响应
    console.log('\n测试场景6: 错误响应');
    AiModelService.parseWithQwenLong = async () => mockResponses.errorResponse;
    cards = await CardGenerator.processChapterContentWithAI(
      testChapter.content,
      testChapter.title,
      'test-document-id'
    );
    console.log(`生成了 ${cards.length} 张卡片`);
    if (cards.length > 0) {
      console.log('第一张卡片示例:');
      console.log(`- 标题: ${cards[0].title}`);
      console.log(`- 内容: ${cards[0].content.substring(0, 50)}...`);
      console.log(`- 标签: ${cards[0].tags.join(', ')}`);
    }
    
    console.log('\n测试完成');
    
    // 恢复原始方法
    AiModelService.parseWithQwenLong = originalParseWithQwenLong;
    
    // 断开数据库连接
    await mongoose.disconnect();
    console.log('已断开MongoDB连接');
    
  } catch (error) {
    console.error('测试过程中出错:', error.message);
    // 恢复原始方法
    AiModelService.parseWithQwenLong = originalParseWithQwenLong;
    
    if (mongoose.connection.readyState !== 0) {
      await mongoose.disconnect();
    }
  }
}

// 执行测试
testCardGenerator(); 